package it.polimi.swKnights.SWIMv2.ejb.administration;

import it.polimi.swKnights.SWIMv2.ejb.entityBeans.Address;
import it.polimi.swKnights.SWIMv2.ejb.entityBeans.RegisteredUser;

import java.util.Date;

public abstract class AdministrationBean
{
	//ritorna un oggetto di tipo T, es. T è registeredUser o sottoclasse  --  --
	protected <T extends RegisteredUser>
	//come valore di ritorno ha questo parametro definito ora	
	T 
	//								// es. admin.class 
	//					l'oggetto class che passerò sarà esattamente un reg.user o sottotipo
	// accetterà una classe che estende reg user o reg user stesso
	createUser(RegisteredUser user, Class<T> clazz)
			throws Exception
	{
		String userName = user.getUserName();
		String passwordHash = user.getPasswordHash();
		String name = user.getName();
		String surname = user.getSurname();
		String eMail = user.geteMail();
		Date birthday = user.getBirthday();
		Address address = user.getAddress();
		char sex = user.getSex();
		
		//un oggetto di classe string o sottotipo
		Class<String> param = String.class;
		
		T newUser = clazz.getConstructor(param, param, param).newInstance(
				userName, passwordHash, eMail);
		newUser.setName(name);
		newUser.setSurname(surname);
		newUser.seteMail(eMail);
		newUser.setSex(sex);
		newUser.setBirthday(birthday);
		newUser.setAddress(address);
		return newUser;
	}
}
